package com.ruoyi.common.core.domain.heytalk.netty;

import com.ruoyi.common.constant.heytalk.CommonConstants;
import com.ruoyi.common.core.domain.heytalk.netty.protocol.MsgPacket;
import lombok.*;
import lombok.experimental.SuperBuilder;

import java.util.Date;

/**
 * 聊天消息格式
 * @author zhusy
 * @since 2021/11/29
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder(toBuilder = true)
@EqualsAndHashCode(callSuper = true)
public class ChatMsg extends MsgPacket {

    /**
     * 消息ID，全局唯一
     */
    private String id;

    /**
     * 发送者头像
     */
    private String fromAvatar;

    /**
     * 发送者昵称
     */
    private String fromName;

    /**
     * 发送者ID
     */
    private String fromId;

    /**
     * 接收人/群 id
     */
    private String toId;

    /**
     * 接收人/群 名称
     */
    private String toName;

    /**
     * 接收人/群 头像
     */
    private String toAvatar;

    /**
     * 消息类型
     * {@link CommonConstants.ChatMsgTypeEnum}
     */
    private String type;

    /**
     * 消息内容
     */
    private String data;

    /**
     * 其它参数对象
     */
    @Builder.Default
    private Object options = new Object();

    /**
     * 消息创建时间
     */
    @Builder.Default
    private Date createTime = new Date();

    /**
     * 是否撤回消息 0（不撤回）
     * {@link CommonConstants.IsRemoveEnum}
     */
    private Integer isRemove;

    /**
     * 发送状态
     */
    private String sendStatus;

    /**
     * 群聊组
     */
    @Builder.Default
    private Object group = null;


    @Data
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    public static class VideoOptions {

        /**
         * 封面
         */
        private String poster;
    }

    @Data
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    public static class AudioOptions {

        /**
         * 时长，默认一秒
         */
        @Builder.Default
        private String time = "1";
    }

    @Data
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    public static class CardOptions {

        private String time;

    }

}
